首页 > 试题广场 >

不同的二叉搜索树 ii

[编程题]不同的二叉搜索树 ii
  • 热度指数:10152 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个值n,请生成所有的存储值1...n.的二叉搜索树BST)的结构
例如:
给定n=3,你的程序应该给出下面五种不同的二叉搜索树(BST)

示例1

输入

3

输出

[{1,#,2,#,3},{1,#,3,2},{2,1,3},{3,1,#,#,2},{3,2,#,1}]

说明:本题目包含复杂数据结构TreeNode,点此查看相关信息
python  递归构造BST过程
class Solution:
    def __init__(self):
        # 使用备忘录存储优化
        self.memo = {}
    def generateTrees(self , n ):
        if n == 0:
            return [None]
        if n == 1:
            return [TreeNode(1)]
        # 使用数据范围做递归构树
        result = self.built(1, n)
        # 返回所有结果
        return result
    # 根据范围递归构树
    def built(self, start, end):
        if start > end:
            return [None]
        if start == end:
            return [TreeNode(start)]
        # 查询是否在备忘录中
        if (start, end) in self.memo:
            return self.memo[(start, end)]
        # 中间结果
        mid = []
        # 每个结点做根结点
        for i in range(start, end+1):
            # 选定i作为根,再递归构造所有可能的左右子树
            left = self.built(start, i-1)
            right = self.built(i+1, end)
            # 构造每一棵树
            for l in left:
                for r in right:
                    root = TreeNode(i)
                    root.left = l
                    root.right = r
                    # 存结果
                    mid.append(root)
        # 备忘录存储
        self.memo[(start, end)] = mid
        # 返回结果
        return self.memo[(start, end)]


发表于 2021-09-16 10:42:02 回复(0)

问题信息

难度:
1条回答 14516浏览

热门推荐

通过挑战的用户

查看代码